//Utils.h
//UniversalArchitecture
//
//Created by issuser on 13-1-11.
//2013年 zhangli. All rights reserved.
//

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#import <sys/utsname.h>

@interface Utils : NSObject

/**
 * 获取UUID
 * @return 返回一个新的UUID字符串
 */
+ (NSString *)uuid;

/**
 * 判断是否开启推送通知
 * @return 返回推送通知是否开启的布尔值
 */
+ (BOOL)isNotifyAlert;

/**
 * 获取时间戳
 * @return 返回当前时间的时间戳字符串
 */
+ (NSString *)timeStamp;

/**
 * 返回从 UTC 1970 年 1 月 1 日午夜开始经过的毫秒数
 * @return 返回当前时间的毫秒数
 */
+ (long long)currentTimeMillis;

/**
 * 16进制颜色转换为UIColor
 * @param stringToConvert 16进制颜色字符串
 * @return 返回对应的UIColor对象
 */
+ (UIColor *)colorWithHexString:(NSString *)stringToConvert;

/**
 * 16进制颜色字符串转换为UIColor，带透明度
 * @param color 16进制颜色字符串
 * @param alpha 透明度
 * @return 返回对应的UIColor对象
 */
+ (UIColor *)colorWithHexString:(NSString *)color alpha:(CGFloat)alpha;

/**
 * UIColor转换为16进制颜色字符串
 * @param color UIColor对象
 * @return 返回16进制颜色字符串
 */
+ (NSString *)hexStringFromColor:(UIColor *)color;

/**
 * 获取UIColor的RGB值
 * @param color UIColor对象
 * @return 返回包含RGB值的数组
 */
+ (NSArray *)colorRGBFromColor:(UIColor *)color;

/**
 * 获取应用版本
 * @return 返回应用的版本号字符串
 */
+ (NSString *)appVersion;

/**
 * 获取应用包名
 * @return 返回应用的包名字符串
 */
+ (NSString *)bundleIdentifier;

/**
 * 得到本机现在用的语言
 * @return 返回当前使用的语言代码字符串
 */
+ (NSString *)getPreferredLanguage;

/**
 * 当前屏幕的分辨率
 * @return 返回屏幕的分辨率字符串，格式为宽*高
 */
+ (NSString *)resolution;

/**
 * 判断iPhone是否联网状态
 * @return 返回设备是否联网的布尔值
 */
+ (BOOL)isNetworkReachable;

/**
 * 获取系统版本
 * @return 返回当前操作系统版本字符串
 */
+ (NSString *)osVersion;

/**
 * 设备名称
 * @return 返回设备名称字符串
 */
+ (NSString *)deviceName;

/**
 * 判断2G，3G，wifi网络类型
 * @return 返回网络类型字符串
 */
+ (NSString *)netType;

/**
 * 格式化日期为带星期的字符串
 * @param string 日期字符串
 * @return 返回带星期的日期字符串
 */
+ (NSString *)weekStringByFormatDateString:(NSString *)string;

/**
 * 格式化日期字符串
 * @param string 日期字符串
 * @return 返回格式化后的日期字符串
 */
+ (NSString *)stringByFormatDateString:(NSString *)string;

/**
 * 创建一个带标题的导航视图
 * @param title 标题
 * @param left 左侧按钮名称
 * @param right 右侧按钮名称
 * @param sel 目标对象
 * @return 返回创建的导航视图
 */
+ (UIView *)createTitleView:(NSString *)title leftName:(NSString *)left rightName:(NSString *)right target:(id)sel;

/**
 * 根据日期字符串获取NSDate对象
 * @param dateString 日期字符串
 * @return 返回NSDate对象
 */
+ (NSDate *)dateFromString:(NSString *)dateString;

/**
 * 根据NSDate对象和格式化字符串获取日期字符串
 * @param date NSDate对象
 * @param formatter 格式化字符串
 * @return 返回日期字符串
 */
+ (NSString *)stringFromDate:(NSDate *)date formatter:(NSString *)formatter;

/**
 * 根据NSDate对象获取日期字符串
 * @param date NSDate对象
 * @return 返回日期字符串
 */
+ (NSString *)stringFromDate:(NSDate *)date;

/**
 * 将英文星期转换为中文
 * @param en 英文星期字符串
 * @return 返回对应的中文星期字符串
 */
+ (NSString *)convertDay:(NSString *)en;

/**
 * 根据时间戳获取日期字符串
 * @param time 时间戳
 * @return 返回对应的日期字符串
 */
+ (NSString *)stringFromTimeMillis:(NSTimeInterval)time;

/**
 * 根据时间戳和格式化字符串获取日期字符串
 * @param time 时间戳
 * @param formatter 格式化字符串
 * @return 返回对应的日期字符串
 */
+ (NSString *)stringFromTimeMillis:(NSTimeInterval)time formatter:(NSString *)formatter;

/**
 * 将图片转换为圆形图片
 * @param image 原始图片
 * @param inset 内边距
 * @return 返回圆形图片
 */
+ (UIImage *)circleImage:(UIImage *)image withParam:(CGFloat)inset;

/**
 * 根据颜色和大小生成一张图片
 * @param color 颜色
 * @param size 大小
 * @return 返回生成的图片
 */
+ (UIImage *)imageWithColor:(UIColor *)color size:(CGSize)size;

/**
 * 创建一个带标题的导航返回按钮
 * @param title 按钮标题
 * @return 返回一个导航返回按钮
 */
+ (UIButton *)navBackButtonItemWithTitle:(NSString *)title;

/**
 * 文件大小格式化字符串
 * @param size 文件大小（字节）
 * @return 返回格式化后的文件大小字符串
 */
+ (NSString *)formattedFileSize:(unsigned long long)size;

/**
 * 判断是否为家长版
 * @return 返回是否为家长版的布尔值
 */
+ (BOOL)isParentsVersion;

/**
 * 截取字符串到规定的字符长度内
 * @param text 原始字符串
 * @param maxLength 最大长度
 * @return 返回截取后的字符串
 */
+ (NSString *)substringInMaxLength:(NSString *)text maxLength:(NSInteger)maxLength;

/**
 * 检测字符串字符长度
 * @param text 字符串
 * @return 返回字符串的unicode长度
 */
+ (NSUInteger)unicodeLengthOfString:(NSString *)text;

/**
 * 检测传真格式是否正确
 * @param fax 传真号码
 * @return 返回是否为有效的传真号码
 */
+ (BOOL)validateFax:(NSString *)fax;

/**
 * 检测除_与-之外的特殊字符是否存在
 * @param string 待验证的字符串
 * @return 返回是否存在特殊字符
 */
+ (BOOL)validateNoCharacterChar:(NSString *)string;

/**
 * 检查是否是数字或者浮点数
 * @param string 待验证的字符串
 * @return 返回是否为数字或浮点数
 */
+ (BOOL)validateNumberOrFloatText:(NSString *)string;

/**
 * 检测手机号码是否正确
 * @param phone 手机号码
 * @return 返回是否为有效的手机号码
 */
+ (BOOL)validatePhone:(NSString *)phone;

/**
 * 检测手机号码是否正确（第二种正则表达式）
 * @param phone 手机号码
 * @return 返回是否为有效的手机号码
 */
+ (BOOL)validatePhoneV2:(NSString *)phone;

/**
 * 检测邮箱格式是否正确
 * @param email 邮箱地址
 * @return 返回是否为有效的邮箱地址
 */
+ (BOOL)validateEmail:(NSString *)email;

/**
 * 检测QQ号码是否正确
 * @param QQ QQ号码
 * @return 返回是否为有效的QQ号码
 */
+ (BOOL)validateQQ:(NSString *)QQ;

/**
 * 检测字符串是否为纯数字
 * @param string 待验证的字符串
 * @return 返回是否为纯数字
 */
+ (BOOL)isNumberText:(NSString *)string;

/**
 * 检测密码是否符合6-16位数字和字母组合
 * @param psw 密码
 * @return 返回是否符合密码规则
 */
+ (BOOL)validatePsw:(NSString *)psw;

/**
 * 昵称是否有效
 * @param nickName 昵称
 * @return 返回是否为有效的昵称
 */
+ (BOOL)validateNickName:(NSString *)nickName;

/**
 * SHA512加密字符串，字母大写
 * @param s 待加密的字符串
 * @return 返回加密后的字符串
 */
+ (NSString *)getSHA512String:(NSString *)s;

/**
 * 获取连接的wifi的名字
 * @return 返回连接的wifi名称
 */
+ (NSString *)getConnecteWifiName;

/**
 * 身份证号码验证
 * @param IdCard 身份证号码
 * @return 返回是否为有效的身份证号码
 */
+ (BOOL)validateIdCard:(NSString *)IdCard;

/**
 * 是否包含汉字
 * @param chineseChar 待检测的字符串
 * @return 返回是否包含汉字
 */
+ (BOOL)containsChineseCharacters:(NSString *)chineseChar;

/**
 * 真实姓名是否有效（暂时没有实现）
 * @param realname 真实姓名
 * @return 返回是否为有效的真实姓名
 */
+ (BOOL)validateRealName:(NSString *)realname;

/**
 * 验证文本是否有效
 * @param text 待验证的文本
 * @return 返回是否为有效的文本
 */
+ (BOOL)validateText:(NSString *)text;

/**
 * 是否包含表情符号
 * @param string 待检测的字符串
 * @return 返回是否包含表情符号
 */
+ (BOOL)stringContainsEmoji:(NSString *)string;

/**
 * 有效的联系方式1到50个字符 包含 空格 _ - /
 * @param contact 联系方式
 * @return 返回是否为有效的联系方式
 */
+ (BOOL)validateContact:(NSString *)contact;

/**
 * 是否有相机权限
 * @return 返回是否有相机权限的布尔值
 */
+ (BOOL)authWithCamera;

/**
 * 是否有Mic权限
 * @return 返回是否有Mic权限的布尔值
 */
+ (BOOL)authWithMic;

/**
 * 获取应用的当前mic权限
 * @return 返回是否有mic权限的布尔值
 */
+ (BOOL)getMicPermission;

/**
 * 是否有photo权限
 * @return 返回是否有photo权限的布尔值
 */
+ (BOOL)authWithPhoto;

/**
 * 获取应用的当前照片权限
 * @return 返回是否有照片权限的布尔值
 */
+ (BOOL)getPhotoPermission;

/**
 * 富文本转html字符串
 * @param string 富文本字符串
 * @return 返回转换后的html字符串
 */
+ (NSString *)attriToStrWithAttri:(NSString *)string;

/**
 * 字符串转富文本
 * @param htmlStr html字符串
 * @return 返回转换后的富文本
 */
+ (NSAttributedString *)strToAttriWithStr:(NSString *)htmlStr;

/**
 * 将对象转换为JSON字符串
 * @param object 待转换的对象
 * @return 返回转换后的JSON字符串
 */
+ (NSString *)convertToJsonData:(id)object;

/**
 * 将JSON字符串转换为对象
 * @param jsonString JSON字符串
 * @return 返回转换后的对象
 */
+ (id)objectWithJsonString:(NSString *)jsonString;

/**
 * 获取当前window
 * @return 返回当前的主window
 */
+ (UIWindow *)mainWindow;

/**
 * 检查位置权限
 * @param vc 视图控制器
 * @param message 提示信息
 */
+ (void)checkLocationPermission:(UIViewController *)vc message:(NSString *)message;

@end
